#[test]
fn bad_parsing() {
assert!(PackageIdSpec::parse("baz:").is_err());
+ assert!(PackageIdSpec::parse("baz:*").is_err());
assert!(PackageIdSpec::parse("baz:1.0").is_err());
assert!(PackageIdSpec::parse("http://baz:1.0").is_err());
assert!(PackageIdSpec::parse("http://#baz:1.0").is_err());
-> CargoResult<Vec<(PackageIdSpec, Dependency)>> {
let mut replace = Vec::new();
for (spec, replacement) in self.replace.iter().flat_map(|x| x) {
- let spec = try!(PackageIdSpec::parse(spec));
+ let spec = match PackageIdSpec::parse(spec) {
+ Ok(spec) => spec,
+ Err(_) => bail!("replacements must specify a \
+ valid semver version \
+ to replace, but `{}` does not", spec),
+ };
let version_specified = match *replacement {
TomlDependency::Detailed(ref d) => d.version.is_some(),
"));
}
+#[test]
+fn invalid_semver_version() {
+ let p = project("local")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "local"
+ version = "0.0.1"
+ authors = []
+
+ [dependencies]
+ foo = "*"
+
+ [replace]
+ "foo:*" = { git = 'https://example.com' }
+ "#)
+ .file("src/lib.rs", "");
+
+ assert_that(p.cargo_process("build"),
+ execs().with_status(101).with_stderr("\
+error: failed to parse manifest at `[..]`
+
+Caused by:
+ replacements must specify a valid semver version to replace, but `foo:*` does not
+"));
+}
+
#[test]
fn different_version() {
Package::new("foo", "0.2.0").publish();